// admin/system/handler/sys_config_handler.go
package handler

import (
	"go-admin1/admin/system/model"
	"go-admin1/admin/system/service"
	"go-admin1/internal/common/utils"

	"github.com/gin-gonic/gin"

	"strconv"
)

// SysConfigHandler 配置参数处理器
type SysConfigHandler struct {
	configService service.SysConfigService
}

// NewSysConfigHandler 创建配置参数处理器实例
func NewSysConfigHandler(configService service.SysConfigService) *SysConfigHandler {
	return &SysConfigHandler{
		configService: configService,
	}
}

// Create 创建配置参数
func (h *SysConfigHandler) Create(c *gin.Context) {
	var config model.SysConfig
	if err := c.ShouldBindJSON(&config); err != nil {
		utils.FailResponse[string](c, "参数解析失败")
		return
	}

	if err := h.configService.Create(&config); err != nil {
		utils.FailResponse[string](c, "创建配置参数失败")
		return
	}
	utils.OkResponse(c, "创建配置参数成功")
}

// GetByID 根据ID获取配置参数
func (h *SysConfigHandler) GetByID(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败")
		return
	}

	config, err := h.configService.GetByID(id)
	if err != nil {
		utils.FailResponse[string](c, "获取配置参数失败")
		return
	}
	utils.OkResponse(c, config)
}

// GetByKey 根据键获取配置参数
func (h *SysConfigHandler) GetByKey(c *gin.Context) {
	configKey := c.Query("configKey")
	if configKey == "" {
		utils.FailResponse[string](c, "参数解析失败")
		return
	}

	config, err := h.configService.GetByKey(configKey)
	if err != nil {
		utils.FailResponse[string](c, "获取配置参数失败")
		return
	}
	utils.OkResponse(c, config)
}

// Update 更新配置参数
func (h *SysConfigHandler) Update(c *gin.Context) {
	var config model.SysConfig
	if err := c.ShouldBindJSON(&config); err != nil {
		utils.FailResponse[string](c, "参数解析失败")
		return
	}

	if err := h.configService.Update(&config); err != nil {
		utils.FailResponse[string](c, "更新失败")
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "更新成功")
}

// Delete 删除配置参数
func (h *SysConfigHandler) Delete(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败")
		return
	}

	if err := h.configService.Delete(id); err != nil {
		utils.FailResponse[string](c, "删除配置参数失败")
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "删除配置参数成功")
}

// List 配置参数列表
func (h *SysConfigHandler) List(c *gin.Context) {
	page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
	pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))

	configs, total, err := h.configService.List(page, pageSize)
	if err != nil {
		utils.FailResponse[string](c, "获取配置参数列表失败")
		return
	}

	resultData := map[string]interface{}{
		"list":  configs,
		"total": total,
	}
	utils.OkWithData(resultData)
}

// ListAll 所有配置参数列表
func (h *SysConfigHandler) ListAll(c *gin.Context) {
	configs, err := h.configService.ListAll()
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败")
		return
	}
	utils.OkWithData(configs)
}
